package com.quectel.sdk.hikisc.basemodel.event;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.quectel.sdk.hikisc.basemodel.EventBaseDataResp;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * 过车事件事件数据
 * <p>
 * Events字段：
 * 参数名称	数据类型	属性描述	是否必填	最大长度	备注
 * eventId	String	事件唯一标识	是	64	同一事件若上报多次，则上报事件的eventId相同
 * srcIndex	String	事件源编号，物理设备是资源编号	是	64
 * srcType	String	事件源类型	是	64
 * eventType	Number	事件类型	是	64
 * status	Number	事件状态	是	1	0-瞬时
 * 1-开始
 * 2-停止
 * 4-事件联动结果更新
 * 5-事件图片异步上传
 * timeout	Number	脉冲超时时间	是		单位：秒
 * happenTime	string	事件发生时间（设备时间）	是	64	ISO8601，示例：2018-08-15T 15:53:47.000+08:00
 * srcParentIdex	String	事件发生的事件源父设备	否	64
 * data	Data	事件详情	是	不限	详见Data属性说明
 * Data属性说明：
 * 参数名称	数据类型	属性描述	是否必填	最大长度	备注
 * eventIndex	String	事件唯一标识	是	64
 * plateNo	String	车牌号	是	32
 * plateType	String	车牌类型key	是	32
 * plateTypeName	String	车牌类型名称	是	32
 * vehicleType	String	车辆类型key	是	32
 * vehicleTypeName	String	车辆类型名称	是	32
 * crossTime	String	过车时间	是	64	ISO8601，示例：2018-08-15T 15:53:47.000+08:00
 * speed	Number	整型，速度值	是		单位km/h
 * alarmType	String	布控类型	否	64	1-被盗车
 * 2-被抢车
 * 3-嫌疑车
 * 4-交通违法车
 * 5-紧急查控车
 * 6-违章车
 * alarmTypeName	String	布控类型名称	否	64
 * monitorId	String	卡口点主键	否	64
 * monitorName	String	卡口点名称	是	64
 * illegalType	Number	整型，违法类型	是		0–正常过车
 * 1–超速
 * 2–逆行
 * 3–黑名单
 * 5-违停
 * mixedName	String	点位或是区间名称	是	64
 * mixedType	Number	整型，点位测速或是区间测速类型	是		1–点位测速
 * 2–区间测速
 * mixedId	String	点位或是区间id	是	64
 * monitorIndexCode	String	卡口点编号	是	64
 * picUrl	Object	包含车牌和车辆url	否
 * + platePicUrl	String	车牌url	否	不限	此参数和imageIndexCode参数的值作为入参，从获取卡口事件图片接口获取图片
 * + vehiclePicUrl	String	车辆url	否	不限	此参数和imageIndexCode参数的值作为入参，从获取卡口事件图片接口获取图片
 * imageIndexCode	String	图片服务器编号	否	64
 * speedLimit	String	超速阈值	否	32	单位 km/h
 * person	Object	车主信息	否	32
 * + personName	String	车主姓名	否	32
 * + phoneNo	String	车主电话	否	32
 *
 * @author: rananxin
 * @email: ryan.ran@quectel.com
 * @date: 2022-10-21 15:44:00
 */
@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper=true)
public class EventMpcData extends EventBaseDataResp.EventDataCls {

    /**
     * data
     */
    private DataCls data;
    /**
     * eventId
     */
    private String eventId;
    /**
     * eventType
     */
    private Integer eventType;
    /**
     * happenTime
     */
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "GMT+8")
    private Date happenTime;
    /**
     * srcIndex
     */
    private String srcIndex;
    /**
     * srcParentIdex
     */
    private String srcParentIdex;
    /**
     * srcType
     */
    private String srcType;
    /**
     * status
     */
    private Integer status;
    /**
     * timeout
     */
    private Integer timeout;

    /**
     * DataCls
     */
    @NoArgsConstructor
    @Data
    public static class DataCls {
        /**
         * eventIndex
         */
        private String eventIndex;
        /**
         * plateNo
         */
        private String plateNo;
        /**
         * plateType
         */
        private String plateType;
        /**
         * plateTypeName
         */
        private String plateTypeName;
        /**
         * vehicleType
         */
        private String vehicleType;
        /**
         * vehicleTypeName
         */
        private String vehicleTypeName;
        /**
         * crossTime
         */
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "GMT+8")
        private Date crossTime;
        /**
         * speed
         */
        private Integer speed;
        /**
         * alarmType
         */
        private String alarmType;
        /**
         * alarmTypeName
         */
        private String alarmTypeName;
        /**
         * monitorId
         */
        private String monitorId;
        /**
         * monitorName
         */
        private String monitorName;
        /**
         * illegalType
         */
        private Integer illegalType;
        /**
         * mixedName
         */
        private String mixedName;
        /**
         * mixedType
         */
        private Integer mixedType;
        /**
         * mixedId
         */
        private String mixedId;
        /**
         * monitorIndexCode
         */
        private String monitorIndexCode;
        /**
         * picUrl
         */
        private PicUrlCls picUrl;
        /**
         * imageIndexCode
         */
        private String imageIndexCode;
        /**
         * speedLimit
         */
        private String speedLimit;
        /**
         * person
         */
        private PersonCls person;

        /**
         * PicUrlCls
         */
        @NoArgsConstructor
        @Data
        public static class PicUrlCls {
            /**
             * platePicUrl
             */
            private String platePicUrl;
            /**
             * vehiclePicUrl
             */
            private String vehiclePicUrl;
        }

        /**
         * PersonCls
         */
        @NoArgsConstructor
        @Data
        public static class PersonCls {
            /**
             * personName
             */
            private String personName;
            /**
             * phoneNo
             */
            private String phoneNo;
        }
    }
}
